<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <title>technology tree</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
            overflow: visible;
            position: relative;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            overflow: visible;
            display: block;
            margin:5px auto;
            margin-bottom: 5px;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">technology tree</div>
        </div>
        <div id="author-info">
          <div id="author-name" class="text">RUWU</div>
          <div id="share-time" class="text">2024-03-05</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg id="page0" xmlns:ed="https://www.edrawsoft.com/xml/2017/SVGExtensions/" xmlns:xlink="http://www.w3.org/1999/xlink" width="1150" xmlns="http://www.w3.org/2000/svg" ed:name="画布 1" ed:hSpacing="30" height="676" viewBox="0 0 1150 676" ed:vSpacing="30" xmlns:ev="http://www.w3.org/2001/xml-events" preserveAspectRadio="xMinYMin meet">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st8 {fill:#454545;font-family:华文楷体;font-size:12pt;font-weight:bold}
.st5 {fill:#454545;font-family:华文楷体;font-size:12pt}
.st7 {fill:#f96628}
.st6 {fill:#ff0000}
]]></style>
    <defs/>
    <rect width="1150" height="676" x="0" fill="#d8edd5" y="0"/>
    <path ed:tosuperid="110" id="111" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,251.45)" ed:parentid="101" fill="#5fb7f1" stroke-linecap="round" stroke="#5fb7f1" d="M-24.7,50C-25.3,51.7,-24.7,53.2,-23.4,53.7C-22.1,54.1,-20.6,53.4,-20,51.7C-19.3,49.5,-18.5,47.2,-17.8,45C-17.1,42.7,-16.4,40.5,-15.7,38.2C-15,36,-14.4,33.7,-13.8,31.5C-13.1,29.2,-12.5,26.9,-11.9,24.7C-11.3,22.4,-10.8,20.2,-10.2,17.9C-9.6,15.6,-9.1,13.3,-8.5,11.1C-7.9,8.8,-7.4,6.5,-6.8,4.3C-6.3,2,-5.7,-0.3,-5.2,-2.5C-4.6,-4.8,-4.1,-7,-3.5,-9.3C-2.9,-11.6,-2.3,-13.8,-1.8,-16.1C-1.2,-18.3,-0.6,-20.6,0,-22.8C0.6,-25.1,1.2,-27.3,1.9,-29.6C2.5,-31.8,3.2,-34,3.9,-36.2C4.5,-38.5,5.2,-40.7,6,-42.9C6.7,-45.1,7.5,-47.3,8.3,-49.4C9.1,-51.6,9.9,-53.8,10.8,-55.9C11.7,-58,12.6,-60.2,13.6,-62.3C14.6,-64.4,15.6,-66.4,16.7,-68.5C17.8,-70.5,19,-72.5,20.2,-74.4C21.4,-76.4,22.7,-78.3,24.1,-80.1C25.5,-81.9,27,-83.7,28.6,-85.4C30.2,-87.1,31.8,-88.6,33.6,-90.1C35.4,-91.6,37.2,-92.9,39.2,-94.1C41.1,-95.3,43.2,-96.4,45.3,-97.3C47.4,-98.2,49.6,-98.9,51.8,-99.5C54.1,-100,56.5,-100.5,58.6,-100.7C60.8,-101,62.6,-101,64.5,-101.1C64.8,-101.1,65.1,-101.3,65.1,-101.6C65.1,-101.8,64.8,-102.1,64.5,-102.1C62.6,-102.1,60.7,-102,58.5,-101.8C56.3,-101.6,53.9,-101.3,51.5,-100.7C49.2,-100.2,46.9,-99.5,44.8,-98.6C42.6,-97.7,40.4,-96.7,38.4,-95.5C36.3,-94.3,34.4,-92.9,32.5,-91.4C30.7,-90,28.9,-88.4,27.2,-86.7C25.6,-85,24,-83.2,22.5,-81.4C21.1,-79.5,19.7,-77.6,18.4,-75.6C17.1,-73.6,15.8,-71.6,14.7,-69.6C13.5,-67.5,12.4,-65.4,11.4,-63.3C10.3,-61.2,9.3,-59.1,8.4,-56.9C7.5,-54.8,6.6,-52.6,5.7,-50.4C4.8,-48.2,4,-46,3.2,-43.8C2.4,-41.6,1.7,-39.4,0.9,-37.2C0.2,-34.9,-0.5,-32.7,-1.2,-30.5C-1.9,-28.2,-2.6,-26,-3.2,-23.7C-3.9,-21.5,-4.5,-19.2,-5.2,-17C-5.8,-14.7,-6.4,-12.5,-7,-10.2C-7.6,-8,-8.2,-5.7,-8.9,-3.5C-9.5,-1.2,-10.1,1,-10.7,3.3C-11.3,5.6,-11.9,7.8,-12.5,10.1C-13.1,12.3,-13.7,14.6,-14.3,16.8C-14.9,19,-15.6,21.3,-16.2,23.5C-16.8,25.8,-17.5,28,-18.1,30.2C-18.8,32.4,-19.5,34.7,-20.2,36.9C-20.9,39.1,-21.6,41.3,-22.4,43.5C-23.1,45.6,-23.9,47.8,-24.7,50z"/>
    <path ed:tosuperid="112" id="113" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,213.41)" ed:parentid="101" fill="#ff7575" stroke-linecap="round" stroke="#ff7575" d="M-28.9,85.1C-29.4,86.8,-28.6,88.2,-27.3,88.6C-26,89,-24.5,88.2,-24.1,86.4C-23.5,84.1,-22.9,81.9,-22.3,79.6C-21.7,77.3,-21.2,75,-20.7,72.7C-20.2,70.4,-19.7,68.1,-19.3,65.8C-18.8,63.5,-18.4,61.2,-17.9,58.9C-17.5,56.6,-17.1,54.3,-16.7,52C-16.3,49.7,-15.9,47.3,-15.6,45C-15.2,42.7,-14.8,40.4,-14.5,38.1C-14.1,35.8,-13.8,33.5,-13.5,31.2C-13.1,28.8,-12.8,26.5,-12.5,24.2C-12.2,21.9,-11.8,19.6,-11.5,17.3C-11.2,15,-10.9,12.7,-10.6,10.3C-10.3,8,-9.9,5.7,-9.6,3.4C-9.3,1.1,-9,-1.2,-8.7,-3.5C-8.3,-5.8,-8,-8.1,-7.7,-10.4C-7.4,-12.8,-7,-15.1,-6.7,-17.4C-6.4,-19.7,-6,-22,-5.7,-24.3C-5.3,-26.6,-4.9,-28.9,-4.6,-31.2C-4.2,-33.5,-3.8,-35.8,-3.4,-38.1C-3,-40.4,-2.6,-42.7,-2.2,-44.9C-1.8,-47.2,-1.3,-49.5,-0.9,-51.8C-0.4,-54.1,0.1,-56.4,0.6,-58.6C1.1,-60.9,1.6,-63.2,2.1,-65.4C2.7,-67.7,3.3,-69.9,3.8,-72.2C4.4,-74.4,5.1,-76.7,5.7,-78.9C6.4,-81.1,7.1,-83.3,7.8,-85.5C8.6,-87.7,9.3,-89.9,10.2,-92.1C11,-94.2,11.9,-96.4,12.8,-98.5C13.7,-100.6,14.7,-102.7,15.7,-104.8C16.8,-106.8,17.9,-108.9,19.1,-110.9C20.3,-112.8,21.5,-114.8,22.9,-116.6C24.2,-118.5,25.6,-120.3,27.2,-122.1C28.7,-123.8,30.3,-125.4,32,-126.9C33.8,-128.5,35.6,-129.9,37.5,-131.2C39.4,-132.4,41.4,-133.6,43.5,-134.6C45.6,-135.5,47.8,-136.4,49.9,-137C52.1,-137.7,54.3,-138.2,56.7,-138.5C59.1,-138.8,61.8,-139,64.5,-139.1C64.8,-139.1,65.1,-139.3,65.1,-139.6C65.1,-139.9,64.8,-140.1,64.5,-140.1C61.7,-140,59,-139.9,56.5,-139.6C54,-139.3,51.8,-138.8,49.6,-138.2C47.3,-137.6,45.1,-136.7,42.9,-135.8C40.8,-134.8,38.7,-133.7,36.7,-132.4C34.7,-131.1,32.8,-129.7,31,-128.1C29.2,-126.6,27.5,-124.9,25.9,-123.2C24.3,-121.4,22.8,-119.6,21.4,-117.7C20,-115.8,18.7,-113.8,17.5,-111.8C16.2,-109.8,15.1,-107.8,14,-105.7C12.9,-103.6,11.8,-101.5,10.9,-99.3C9.9,-97.2,9,-95,8.1,-92.9C7.2,-90.7,6.4,-88.5,5.7,-86.3C4.9,-84,4.1,-81.8,3.4,-79.6C2.7,-77.3,2.1,-75.1,1.4,-72.8C0.8,-70.6,0.2,-68.3,-0.4,-66.1C-1,-63.8,-1.6,-61.5,-2.1,-59.2C-2.6,-56.9,-3.1,-54.7,-3.6,-52.4C-4.1,-50.1,-4.6,-47.8,-5.1,-45.5C-5.5,-43.2,-6,-40.9,-6.4,-38.6C-6.9,-36.3,-7.3,-34,-7.7,-31.7C-8.1,-29.4,-8.5,-27.1,-8.9,-24.8C-9.3,-22.5,-9.7,-20.2,-10,-17.9C-10.4,-15.6,-10.8,-13.3,-11.1,-11C-11.5,-8.7,-11.9,-6.4,-12.2,-4C-12.6,-1.7,-12.9,0.6,-13.3,2.9C-13.6,5.2,-14,7.5,-14.3,9.8C-14.7,12.1,-15,14.4,-15.4,16.7C-15.8,19,-16.1,21.3,-16.5,23.6C-16.8,25.9,-17.2,28.2,-17.6,30.5C-17.9,32.8,-18.3,35.1,-18.7,37.4C-19.1,39.7,-19.5,42,-19.9,44.3C-20.3,46.6,-20.7,48.9,-21.1,51.2C-21.5,53.5,-22,55.7,-22.4,58C-22.9,60.3,-23.3,62.6,-23.8,64.8C-24.3,67.1,-24.8,69.4,-25.4,71.6C-25.9,73.9,-26.4,76.1,-27,78.4C-27.6,80.6,-28.2,82.8,-28.9,85.1z"/>
    <path ed:tosuperid="194" id="197" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,426.09)" ed:parentid="101" fill="#fa8556" stroke-linecap="round" stroke="#fa8556" d="M-14.9,-28.3C-15.7,-29.9,-17.3,-30.4,-18.5,-29.8C-19.7,-29.2,-20.2,-27.6,-19.4,-26C-18.3,-24,-17.3,-21.9,-16.3,-19.8C-15.3,-17.8,-14.3,-15.7,-13.3,-13.5C-12.3,-11.4,-11.4,-9.3,-10.4,-7.2C-9.5,-5.1,-8.5,-2.9,-7.6,-0.8C-6.6,1.3,-5.7,3.5,-4.7,5.6C-3.8,7.7,-2.9,9.9,-1.9,12C-0.9,14.1,0,16.3,1,18.4C2,20.5,3,22.6,4.1,24.7C5.1,26.8,6.2,28.9,7.3,31C8.4,33.1,9.5,35.1,10.7,37.2C11.9,39.2,13.1,41.2,14.4,43.2C15.7,45.2,17.1,47.1,18.5,49C19.9,50.9,21.4,52.7,23,54.5C24.6,56.3,26.2,58,28,59.6C29.7,61.2,31.6,62.7,33.5,64.1C35.4,65.5,37.4,66.7,39.5,67.8C41.6,68.9,43.8,69.9,46.1,70.7C48.3,71.5,50.5,72.1,52.9,72.6C55.3,73,58,73.3,59.9,73.5C61.9,73.6,63.2,73.6,64.5,73.6C64.8,73.6,65.1,73.3,65.1,73.1C65.1,72.8,64.8,72.6,64.5,72.6C63.2,72.5,61.9,72.5,60,72.3C58.1,72.1,55.5,71.8,53.2,71.3C50.8,70.7,48.7,70.1,46.6,69.2C44.5,68.4,42.4,67.4,40.4,66.3C38.4,65.2,36.5,63.9,34.6,62.5C32.8,61.1,31.1,59.6,29.4,58C27.8,56.4,26.2,54.7,24.8,53C23.3,51.2,21.9,49.4,20.6,47.5C19.2,45.6,18,43.7,16.8,41.7C15.6,39.8,14.4,37.8,13.3,35.7C12.2,33.7,11.1,31.6,10.1,29.6C9.1,27.5,8.1,25.4,7.1,23.3C6.2,21.2,5.2,19.1,4.3,16.9C3.4,14.8,2.5,12.6,1.6,10.5C0.7,8.4,-0.2,6.2,-1.1,4C-2,1.9,-2.8,-0.3,-3.7,-2.4C-4.6,-4.6,-5.5,-6.8,-6.4,-8.9C-7.3,-11.1,-8.2,-13.3,-9.1,-15.4C-10,-17.6,-11,-19.7,-11.9,-21.9C-12.9,-24,-13.9,-26.1,-14.9,-28.3z"/>
    <path ed:tosuperid="118" id="119" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,326.26)" ed:parentid="101" fill="#f1a3dc" stroke-linecap="round" stroke="#f1a3dc" d="M-4.6,0.2C-6.1,1.1,-6.5,2.7,-5.8,3.9C-5,5,-3.3,5.4,-1.9,4.3C0,3,2,1.6,3.9,0.3C5.8,-1.1,7.7,-2.5,9.6,-3.8C11.4,-5.2,13.3,-6.5,15.3,-7.8C17.2,-9.1,19.1,-10.4,21,-11.6C23,-12.9,25,-14.1,27,-15.2C29,-16.4,31,-17.4,33.1,-18.4C35.1,-19.4,37.2,-20.4,39.4,-21.2C41.5,-22,43.7,-22.8,45.9,-23.4C48.1,-24.1,50.3,-24.6,52.7,-25C55,-25.4,57.5,-25.8,59.5,-26C61.5,-26.2,63,-26.2,64.5,-26.3C64.8,-26.3,65.1,-26.5,65.1,-26.8C65.1,-27,64.8,-27.3,64.5,-27.3C63,-27.3,61.5,-27.3,59.4,-27.2C57.4,-27.1,54.8,-26.9,52.4,-26.6C50,-26.3,47.7,-25.9,45.4,-25.4C43.1,-24.8,40.8,-24.2,38.6,-23.4C36.3,-22.7,34.1,-21.9,31.9,-20.9C29.8,-20,27.6,-19,25.5,-18C23.4,-16.9,21.3,-15.8,19.2,-14.6C17.2,-13.5,15.2,-12.3,13.2,-11.1C11.1,-9.8,9.2,-8.6,7.2,-7.3C5.2,-6.1,3.2,-4.8,1.3,-3.6C-0.7,-2.3,-2.7,-1.1,-4.6,0.2z"/>
    <path ed:tosuperid="120" id="121" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,303.11)" ed:parentid="101" fill="#80cf70" stroke-linecap="round" stroke="#80cf70" d="M8.9,13C9.9,14.5,11.6,14.8,12.7,13.9C13.8,13.1,14,11.4,12.8,10C11.4,8.2,10,6.4,8.6,4.5C7.2,2.7,5.8,0.8,4.4,-1.1C3.1,-3,1.7,-4.8,0.3,-6.7C-1.1,-8.6,-2.5,-10.5,-3.9,-12.3C-5.3,-14.2,-6.8,-16.1,-8.2,-17.9C-9.7,-19.8,-11.2,-21.6,-12.7,-23.4C-14.2,-25.2,-15.8,-26.9,-17.4,-28.7C-19.1,-30.4,-20.7,-32,-22.5,-33.6C-24.2,-35.2,-26.1,-36.8,-27.9,-38.2C-29.8,-39.7,-31.8,-41,-33.8,-42.2C-35.8,-43.5,-37.9,-44.6,-40.1,-45.6C-42.3,-46.6,-44.5,-47.4,-46.8,-48.1C-49,-48.8,-51.2,-49.3,-53.7,-49.7C-56.2,-50.1,-58.9,-50.3,-60.7,-50.4C-62.6,-50.5,-63.5,-50.4,-64.5,-50.4C-64.8,-50.4,-65.1,-50.2,-65.1,-49.9C-65.1,-49.6,-64.8,-49.4,-64.5,-49.4C-63.5,-49.4,-62.6,-49.4,-60.8,-49.2C-59,-49.1,-56.3,-48.7,-54,-48.3C-51.6,-47.8,-49.4,-47.2,-47.3,-46.5C-45.2,-45.7,-43,-44.8,-41,-43.8C-38.9,-42.8,-36.9,-41.6,-35,-40.3C-33.1,-39.1,-31.3,-37.7,-29.5,-36.2C-27.7,-34.8,-26.1,-33.2,-24.4,-31.6C-22.8,-30,-21.2,-28.3,-19.7,-26.6C-18.2,-24.8,-16.7,-23.1,-15.3,-21.3C-13.9,-19.4,-12.5,-17.6,-11.1,-15.7C-9.7,-13.9,-8.4,-12,-7.1,-10.1C-5.7,-8.2,-4.4,-6.2,-3.1,-4.3C-1.8,-2.4,-0.5,-0.4,0.8,1.5C2.1,3.4,3.4,5.4,4.8,7.3C6.1,9.2,7.5,11.1,8.9,13z"/>
    <path ed:tosuperid="122" id="123" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,203.29)" ed:parentid="101" fill="#58d5d5" stroke-linecap="round" stroke="#58d5d5" d="M24.8,96C25.2,97.7,26.7,98.6,28,98.2C29.3,97.9,30.1,96.4,29.6,94.7C29,92.4,28.4,90.2,27.9,88C27.3,85.7,26.8,83.5,26.3,81.2C25.8,79,25.3,76.7,24.8,74.4C24.4,72.1,23.9,69.9,23.5,67.6C23.1,65.3,22.7,63,22.3,60.7C21.9,58.4,21.5,56.1,21.1,53.8C20.7,51.5,20.4,49.2,20,46.9C19.7,44.6,19.3,42.3,19,40C18.7,37.7,18.3,35.4,18,33.1C17.7,30.8,17.4,28.5,17.1,26.2C16.7,23.9,16.4,21.6,16.1,19.3C15.8,16.9,15.5,14.6,15.2,12.3C14.9,10,14.6,7.7,14.3,5.4C14,3.1,13.7,0.8,13.3,-1.6C13,-3.9,12.7,-6.2,12.4,-8.5C12.1,-10.8,11.8,-13.1,11.4,-15.4C11.1,-17.8,10.8,-20.1,10.4,-22.4C10.1,-24.7,9.8,-27,9.4,-29.3C9.1,-31.6,8.7,-33.9,8.3,-36.2C7.9,-38.6,7.6,-40.9,7.2,-43.2C6.8,-45.5,6.4,-47.8,5.9,-50.1C5.5,-52.4,5.1,-54.7,4.6,-57C4.2,-59.3,3.7,-61.6,3.2,-63.8C2.7,-66.1,2.2,-68.4,1.6,-70.7C1.1,-73,0.6,-75.3,-0,-77.5C-0.6,-79.8,-1.2,-82,-1.9,-84.3C-2.5,-86.6,-3.2,-88.8,-3.9,-91C-4.6,-93.3,-5.4,-95.5,-6.2,-97.7C-7,-99.9,-7.8,-102.1,-8.7,-104.3C-9.6,-106.5,-10.5,-108.6,-11.5,-110.7C-12.5,-112.9,-13.6,-115,-14.7,-117.1C-15.8,-119.1,-17,-121.2,-18.3,-123.1C-19.5,-125.1,-20.9,-127.1,-22.3,-128.9C-23.8,-130.8,-25.3,-132.6,-26.9,-134.3C-28.6,-136,-30.3,-137.6,-32.1,-139.1C-34,-140.6,-35.9,-142,-37.9,-143.2C-40,-144.5,-42.1,-145.5,-44.3,-146.4C-46.4,-147.4,-48.7,-148.1,-51,-148.7C-53.3,-149.3,-55.7,-149.7,-57.9,-149.9C-60.2,-150.2,-62.3,-150.2,-64.5,-150.2C-64.8,-150.2,-65.1,-150,-65.1,-149.7C-65.1,-149.5,-64.8,-149.2,-64.5,-149.2C-62.4,-149.2,-60.3,-149.1,-58.1,-148.8C-55.9,-148.6,-53.5,-148.1,-51.3,-147.5C-49,-146.9,-46.9,-146.2,-44.8,-145.3C-42.7,-144.3,-40.6,-143.3,-38.7,-142C-36.7,-140.8,-34.9,-139.5,-33.1,-138C-31.3,-136.5,-29.7,-134.9,-28.1,-133.2C-26.5,-131.5,-25.1,-129.8,-23.7,-127.9C-22.3,-126.1,-21,-124.1,-19.8,-122.2C-18.6,-120.2,-17.4,-118.2,-16.4,-116.2C-15.3,-114.1,-14.3,-112,-13.3,-109.9C-12.4,-107.8,-11.5,-105.7,-10.6,-103.5C-9.8,-101.4,-9,-99.2,-8.2,-97C-7.5,-94.8,-6.8,-92.6,-6.1,-90.4C-5.4,-88.1,-4.8,-85.9,-4.2,-83.7C-3.6,-81.4,-3,-79.2,-2.5,-76.9C-1.9,-74.7,-1.4,-72.4,-0.9,-70.1C-0.4,-67.8,0.1,-65.6,0.6,-63.3C1,-61,1.4,-58.7,1.9,-56.4C2.3,-54.2,2.7,-51.9,3.1,-49.6C3.5,-47.3,3.8,-45,4.2,-42.7C4.6,-40.4,4.9,-38.1,5.3,-35.8C5.6,-33.5,5.9,-31.2,6.2,-28.9C6.6,-26.5,6.9,-24.2,7.2,-21.9C7.5,-19.6,7.8,-17.3,8.1,-15C8.4,-12.7,8.7,-10.4,8.9,-8.1C9.2,-5.7,9.5,-3.4,9.8,-1.1C10.1,1.2,10.3,3.5,10.6,5.8C10.9,8.2,11.2,10.5,11.4,12.8C11.7,15.1,12,17.4,12.3,19.7C12.5,22.1,12.8,24.4,13.1,26.7C13.4,29,13.7,31.3,13.9,33.7C14.2,36,14.5,38.3,14.8,40.6C15.1,42.9,15.5,45.2,15.8,47.6C16.1,49.9,16.4,52.2,16.8,54.5C17.1,56.8,17.5,59.1,17.8,61.5C18.2,63.8,18.6,66.1,19,68.4C19.4,70.7,19.8,73,20.2,75.3C20.7,77.6,21.1,79.9,21.6,82.2C22.1,84.5,22.6,86.8,23.1,89.1C23.7,91.4,24.2,93.7,24.8,96z"/>
    <path ed:tosuperid="124" id="125" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,392.81)" ed:parentid="101" fill="#80cf70" stroke-linecap="round" stroke="#80cf70" d="M-5.8,-8.2C-7,-9.6,-8.7,-9.6,-9.6,-8.6C-10.6,-7.7,-10.6,-6,-9.3,-4.8C-7.7,-3.1,-6,-1.5,-4.4,0.2C-2.8,1.8,-1.2,3.5,0.5,5.2C2.1,6.8,3.7,8.5,5.4,10.2C7,11.8,8.7,13.5,10.4,15.1C12.1,16.7,13.8,18.4,15.6,19.9C17.4,21.5,19.2,23,21,24.5C22.9,26,24.8,27.4,26.7,28.7C28.7,30.1,30.7,31.3,32.8,32.5C34.9,33.6,37,34.7,39.2,35.6C41.4,36.5,43.7,37.3,45.9,37.9C48.2,38.6,50.4,39.1,52.8,39.5C55.3,39.9,57.9,40.1,59.9,40.2C61.8,40.3,63.2,40.3,64.5,40.3C64.8,40.3,65.1,40.1,65.1,39.8C65.1,39.5,64.8,39.3,64.5,39.3C63.2,39.3,61.9,39.2,60,39C58,38.8,55.5,38.5,53.1,38C50.8,37.5,48.6,36.9,46.5,36.2C44.3,35.5,42.2,34.6,40.1,33.6C38,32.6,36,31.5,34,30.3C32.1,29.1,30.2,27.8,28.4,26.4C26.5,25.1,24.7,23.6,23,22.1C21.3,20.6,19.6,19,17.9,17.4C16.3,15.8,14.7,14.2,13.1,12.5C11.5,10.8,9.9,9.1,8.3,7.4C6.8,5.7,5.2,3.9,3.7,2.2C2.1,0.4,0.6,-1.3,-1,-3C-2.6,-4.8,-4.2,-6.5,-5.8,-8.2z"/>
    <path ed:tosuperid="126" id="127" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,236.56)" ed:parentid="101" fill="#a98ae7" stroke-linecap="round" stroke="#a98ae7" d="M21.9,65C22.4,66.7,23.9,67.5,25.2,67.1C26.5,66.6,27.2,65.1,26.6,63.4C25.9,61.2,25.2,59,24.5,56.8C23.9,54.6,23.2,52.4,22.6,50.2C22,47.9,21.4,45.7,20.8,43.4C20.2,41.2,19.7,38.9,19.1,36.7C18.6,34.4,18.1,32.2,17.5,29.9C17,27.6,16.5,25.4,16,23.1C15.5,20.8,15,18.5,14.5,16.2C14,14,13.5,11.7,13,9.4C12.6,7.1,12.1,4.8,11.6,2.6C11.1,0.3,10.6,-2,10.1,-4.3C9.6,-6.6,9.2,-8.9,8.7,-11.1C8.2,-13.4,7.7,-15.7,7.1,-18C6.6,-20.3,6.1,-22.5,5.6,-24.8C5,-27.1,4.5,-29.4,3.9,-31.6C3.4,-33.9,2.8,-36.2,2.2,-38.5C1.6,-40.7,1,-43,0.3,-45.2C-0.3,-47.5,-1,-49.7,-1.7,-52C-2.3,-54.2,-3.1,-56.5,-3.8,-58.7C-4.6,-60.9,-5.4,-63.1,-6.2,-65.3C-7,-67.5,-7.9,-69.7,-8.8,-71.9C-9.7,-74,-10.7,-76.2,-11.7,-78.3C-12.7,-80.4,-13.8,-82.5,-15,-84.6C-16.1,-86.6,-17.3,-88.6,-18.6,-90.6C-19.9,-92.6,-21.3,-94.5,-22.8,-96.4C-24.2,-98.2,-25.8,-100,-27.4,-101.7C-29.1,-103.4,-30.9,-105,-32.7,-106.4C-34.6,-107.9,-36.5,-109.2,-38.6,-110.4C-40.6,-111.6,-42.8,-112.7,-45,-113.5C-47.2,-114.4,-49.4,-115.1,-51.8,-115.6C-54.1,-116.2,-56.6,-116.5,-58.7,-116.7C-60.9,-116.9,-62.7,-116.9,-64.5,-117C-64.8,-117,-65.1,-116.7,-65.1,-116.5C-65.1,-116.2,-64.8,-116,-64.5,-116C-62.7,-115.9,-60.9,-115.9,-58.9,-115.6C-56.8,-115.4,-54.3,-115,-52,-114.4C-49.8,-113.9,-47.6,-113.1,-45.5,-112.3C-43.4,-111.4,-41.3,-110.3,-39.4,-109.1C-37.4,-108,-35.5,-106.6,-33.7,-105.2C-32,-103.7,-30.3,-102.1,-28.7,-100.5C-27.1,-98.8,-25.6,-97,-24.2,-95.2C-22.8,-93.4,-21.5,-91.5,-20.3,-89.5C-19.1,-87.6,-17.9,-85.6,-16.8,-83.5C-15.7,-81.5,-14.7,-79.4,-13.8,-77.3C-12.8,-75.2,-11.9,-73.1,-11,-70.9C-10.2,-68.8,-9.3,-66.6,-8.6,-64.4C-7.8,-62.3,-7,-60.1,-6.3,-57.8C-5.6,-55.6,-5,-53.4,-4.3,-51.2C-3.7,-48.9,-3.1,-46.7,-2.5,-44.5C-1.9,-42.2,-1.3,-40,-0.8,-37.7C-0.2,-35.4,0.3,-33.2,0.8,-30.9C1.4,-28.6,1.9,-26.4,2.3,-24.1C2.8,-21.8,3.3,-19.5,3.8,-17.3C4.2,-15,4.7,-12.7,5.2,-10.4C5.6,-8.1,6.1,-5.8,6.5,-3.5C7,-1.3,7.4,1,7.8,3.3C8.3,5.6,8.7,7.9,9.2,10.2C9.6,12.5,10.1,14.8,10.5,17.1C11,19.4,11.4,21.7,11.9,24C12.3,26.2,12.8,28.5,13.3,30.8C13.8,33.1,14.3,35.4,14.8,37.7C15.3,40,15.8,42.3,16.3,44.5C16.9,46.8,17.5,49.1,18,51.4C18.6,53.7,19.2,55.9,19.9,58.2C20.5,60.5,21.2,62.7,21.9,65z"/>
    <path ed:tosuperid="142" id="143" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,459.36)" ed:parentid="101" fill="#a98ae7" stroke-linecap="round" stroke="#a98ae7" d="M-20.7,-55.9C-21.2,-57.6,-22.7,-58.3,-24,-57.9C-25.3,-57.4,-26,-55.9,-25.4,-54.2C-24.6,-52.1,-23.9,-49.9,-23.1,-47.7C-22.4,-45.5,-21.7,-43.3,-21,-41.1C-20.4,-38.8,-19.7,-36.6,-19.1,-34.4C-18.4,-32.1,-17.8,-29.9,-17.2,-27.7C-16.6,-25.4,-16,-23.2,-15.4,-20.9C-14.9,-18.7,-14.3,-16.4,-13.7,-14.1C-13.1,-11.9,-12.6,-9.6,-12,-7.4C-11.5,-5.1,-10.9,-2.8,-10.3,-0.6C-9.8,1.7,-9.2,4,-8.6,6.2C-8.1,8.5,-7.5,10.8,-6.9,13C-6.3,15.3,-5.8,17.6,-5.2,19.8C-4.6,22.1,-4,24.3,-3.3,26.6C-2.7,28.8,-2.1,31.1,-1.4,33.3C-0.7,35.6,-0.1,37.8,0.6,40.1C1.4,42.3,2.1,44.5,2.8,46.8C3.6,49,4.4,51.2,5.2,53.4C6,55.6,6.9,57.8,7.8,59.9C8.7,62.1,9.7,64.3,10.7,66.4C11.7,68.5,12.7,70.6,13.9,72.7C15,74.8,16.2,76.8,17.4,78.8C18.7,80.8,20,82.7,21.5,84.6C22.9,86.5,24.4,88.3,26,90.1C27.6,91.8,29.3,93.5,31.1,95C32.9,96.6,34.8,98,36.8,99.2C38.8,100.5,40.9,101.7,43.1,102.6C45.2,103.6,47.5,104.4,49.8,105C52,105.6,54.2,106.1,56.7,106.4C59.1,106.7,61.8,106.8,64.5,106.8C64.8,106.9,65.1,106.6,65.1,106.3C65.1,106.1,64.8,105.8,64.5,105.8C61.9,105.7,59.2,105.6,56.9,105.3C54.5,104.9,52.3,104.4,50.1,103.8C47.9,103.1,45.8,102.3,43.7,101.3C41.6,100.3,39.6,99.2,37.7,97.9C35.8,96.6,34,95.2,32.2,93.7C30.5,92.2,28.9,90.6,27.4,88.8C25.8,87.1,24.4,85.3,23.1,83.4C21.7,81.6,20.5,79.6,19.3,77.7C18.1,75.7,17,73.7,15.9,71.6C14.8,69.6,13.8,67.5,12.9,65.4C12,63.3,11.1,61.1,10.2,59C9.4,56.8,8.6,54.6,7.8,52.5C7,50.3,6.3,48.1,5.6,45.9C4.9,43.6,4.2,41.4,3.5,39.2C2.9,37,2.2,34.7,1.6,32.5C1,30.2,0.4,28,-0.1,25.7C-0.7,23.5,-1.3,21.2,-1.8,19C-2.4,16.7,-2.9,14.4,-3.5,12.2C-4,9.9,-4.5,7.6,-5,5.4C-5.5,3.1,-6.1,0.8,-6.6,-1.5C-7.1,-3.7,-7.6,-6,-8.1,-8.3C-8.6,-10.6,-9.2,-12.8,-9.7,-15.1C-10.2,-17.4,-10.7,-19.7,-11.3,-21.9C-11.8,-24.2,-12.4,-26.5,-12.9,-28.8C-13.5,-31,-14.1,-33.3,-14.7,-35.6C-15.3,-37.9,-15.9,-40.1,-16.5,-42.4C-17.2,-44.6,-17.8,-46.9,-18.5,-49.2C-19.2,-51.4,-19.9,-53.6,-20.7,-55.9z"/>
    <path ed:tosuperid="148" id="149" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,492.64)" ed:parentid="101" fill="#58d5d5" stroke-linecap="round" stroke="#58d5d5" d="M-24.1,-86.4C-24.5,-88.2,-26,-89,-27.3,-88.6C-28.6,-88.2,-29.4,-86.8,-28.9,-85.1C-28.2,-82.8,-27.6,-80.6,-27,-78.4C-26.4,-76.1,-25.9,-73.9,-25.4,-71.6C-24.8,-69.4,-24.3,-67.1,-23.8,-64.8C-23.3,-62.6,-22.9,-60.3,-22.4,-58C-22,-55.7,-21.5,-53.5,-21.1,-51.2C-20.7,-48.9,-20.3,-46.6,-19.9,-44.3C-19.5,-42,-19.1,-39.7,-18.7,-37.4C-18.3,-35.1,-17.9,-32.8,-17.6,-30.5C-17.2,-28.2,-16.8,-25.9,-16.5,-23.6C-16.1,-21.3,-15.8,-19,-15.4,-16.7C-15,-14.4,-14.7,-12.1,-14.3,-9.8C-14,-7.5,-13.6,-5.2,-13.3,-2.9C-12.9,-0.6,-12.6,1.7,-12.2,4C-11.9,6.4,-11.5,8.7,-11.1,11C-10.8,13.3,-10.4,15.6,-10,17.9C-9.7,20.2,-9.3,22.5,-8.9,24.8C-8.5,27.1,-8.1,29.4,-7.7,31.7C-7.3,34,-6.9,36.3,-6.4,38.6C-6,40.9,-5.5,43.2,-5.1,45.5C-4.6,47.8,-4.1,50.1,-3.6,52.4C-3.1,54.7,-2.6,56.9,-2.1,59.2C-1.6,61.5,-1,63.8,-0.4,66.1C0.2,68.3,0.8,70.6,1.4,72.8C2.1,75.1,2.7,77.3,3.4,79.6C4.1,81.8,4.9,84,5.7,86.3C6.4,88.5,7.2,90.7,8.1,92.9C9,95,9.9,97.2,10.9,99.3C11.8,101.5,12.9,103.6,14,105.7C15.1,107.8,16.2,109.8,17.5,111.8C18.7,113.8,20,115.8,21.4,117.7C22.8,119.6,24.3,121.4,25.9,123.2C27.5,124.9,29.2,126.6,31,128.1C32.8,129.7,34.7,131.1,36.7,132.4C38.7,133.7,40.8,134.8,42.9,135.8C45.1,136.7,47.3,137.6,49.6,138.2C51.8,138.8,54,139.3,56.5,139.6C59,139.9,61.7,140,64.5,140.1C64.8,140.1,65.1,139.9,65.1,139.6C65.1,139.3,64.8,139.1,64.5,139.1C61.8,139,59.1,138.8,56.7,138.5C54.3,138.2,52.1,137.7,49.9,137C47.8,136.4,45.6,135.5,43.5,134.6C41.4,133.6,39.4,132.4,37.5,131.2C35.6,129.9,33.8,128.5,32,126.9C30.3,125.4,28.7,123.8,27.2,122.1C25.6,120.3,24.2,118.5,22.9,116.6C21.5,114.8,20.3,112.8,19.1,110.9C17.9,108.9,16.8,106.8,15.7,104.8C14.7,102.7,13.7,100.6,12.8,98.5C11.9,96.4,11,94.2,10.2,92.1C9.3,89.9,8.6,87.7,7.8,85.5C7.1,83.3,6.4,81.1,5.7,78.9C5.1,76.7,4.4,74.4,3.8,72.2C3.3,69.9,2.7,67.7,2.1,65.4C1.6,63.2,1.1,60.9,0.6,58.6C0.1,56.4,-0.4,54.1,-0.9,51.8C-1.3,49.5,-1.8,47.2,-2.2,44.9C-2.6,42.7,-3,40.4,-3.4,38.1C-3.8,35.8,-4.2,33.5,-4.6,31.2C-4.9,28.9,-5.3,26.6,-5.7,24.3C-6,22,-6.4,19.7,-6.7,17.4C-7,15.1,-7.4,12.8,-7.7,10.4C-8,8.1,-8.3,5.8,-8.7,3.5C-9,1.2,-9.3,-1.1,-9.6,-3.4C-9.9,-5.7,-10.3,-8,-10.6,-10.3C-10.9,-12.7,-11.2,-15,-11.5,-17.3C-11.8,-19.6,-12.2,-21.9,-12.5,-24.2C-12.8,-26.5,-13.1,-28.8,-13.5,-31.2C-13.8,-33.5,-14.1,-35.8,-14.5,-38.1C-14.8,-40.4,-15.2,-42.7,-15.6,-45C-15.9,-47.3,-16.3,-49.7,-16.7,-52C-17.1,-54.3,-17.5,-56.6,-17.9,-58.9C-18.4,-61.2,-18.8,-63.5,-19.3,-65.8C-19.7,-68.1,-20.2,-70.4,-20.7,-72.7C-21.2,-75,-21.7,-77.3,-22.3,-79.6C-22.9,-81.9,-23.5,-84.1,-24.1,-86.4z"/>
    <path ed:tosuperid="150" id="151" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,359.54)" ed:parentid="101" fill="#6cc9e5" stroke-linecap="round" stroke="#6cc9e5" d="M1.5,-2.7C-0.2,-3,-1.6,-2,-1.8,-0.6C-2,0.7,-1,2.1,0.8,2.3C3.1,2.6,5.4,2.8,7.7,3.1C10.1,3.4,12.4,3.7,14.7,3.9C17,4.2,19.3,4.5,21.7,4.7C24,5,26.3,5.2,28.7,5.5C31,5.7,33.3,5.9,35.7,6.1C38,6.3,40.3,6.5,42.7,6.6C45,6.8,47.4,6.9,49.7,7C52,7.1,54.3,7.1,56.7,7.1C59.2,7.1,61.8,7.1,64.5,7C64.8,7,65.1,6.8,65.1,6.5C65.1,6.2,64.8,6,64.5,6C61.8,5.9,59.2,5.8,56.8,5.6C54.3,5.5,52.1,5.3,49.8,5C47.5,4.8,45.2,4.6,42.9,4.3C40.6,4,38.3,3.7,36,3.3C33.7,3,31.4,2.6,29.1,2.3C26.8,1.9,24.5,1.5,22.2,1.1C19.9,0.7,17.6,0.3,15.3,-0.2C13,-0.6,10.7,-1,8.4,-1.4C6.1,-1.8,3.8,-2.2,1.5,-2.7z"/>
    <path ed:tosuperid="133" id="134" stroke-linejoin="round" transform="matrix(1,0,0,1,528.39,292.99)" ed:parentid="101" fill="#ffcd55" stroke-linecap="round" stroke="#ffcd55" d="M-16,16.5C-16.9,18,-16.6,19.6,-15.4,20.3C-14.3,21.1,-12.6,20.7,-11.7,19.1C-10.5,17.1,-9.4,15,-8.2,13C-7,10.9,-5.9,8.9,-4.8,6.8C-3.7,4.8,-2.6,2.7,-1.5,0.6C-0.4,-1.4,0.7,-3.5,1.8,-5.5C2.9,-7.6,4,-9.6,5.1,-11.7C6.3,-13.7,7.4,-15.7,8.6,-17.7C9.7,-19.7,10.9,-21.7,12.1,-23.7C13.3,-25.7,14.6,-27.6,15.9,-29.5C17.2,-31.4,18.5,-33.3,20,-35.1C21.4,-36.9,22.8,-38.7,24.4,-40.4C25.9,-42.1,27.5,-43.8,29.2,-45.3C30.9,-46.9,32.7,-48.3,34.5,-49.7C36.3,-51,38.3,-52.3,40.3,-53.4C42.3,-54.5,44.4,-55.4,46.5,-56.2C48.7,-57,50.8,-57.7,53.1,-58.2C55.5,-58.7,58,-59.1,60,-59.3C61.9,-59.5,63.2,-59.5,64.5,-59.5C64.8,-59.5,65.1,-59.8,65.1,-60C65.1,-60.3,64.8,-60.5,64.5,-60.5C63.2,-60.6,61.8,-60.6,59.9,-60.4C57.9,-60.3,55.3,-60,52.9,-59.6C50.4,-59.1,48.2,-58.5,46,-57.8C43.8,-57,41.6,-56.1,39.4,-55C37.3,-54,35.2,-52.7,33.3,-51.4C31.3,-50.1,29.4,-48.6,27.6,-47.1C25.8,-45.5,24.1,-43.9,22.5,-42.2C20.8,-40.5,19.2,-38.7,17.7,-36.9C16.2,-35.1,14.8,-33.2,13.4,-31.3C12,-29.4,10.6,-27.5,9.3,-25.5C8,-23.5,6.7,-21.6,5.5,-19.6C4.3,-17.6,3,-15.6,1.8,-13.6C0.6,-11.5,-0.5,-9.5,-1.7,-7.5C-2.9,-5.5,-4.1,-3.5,-5.2,-1.4C-6.4,0.6,-7.6,2.6,-8.7,4.6C-9.9,6.6,-11.1,8.6,-12.3,10.6C-13.5,12.6,-14.8,14.5,-16,16.5z"/>
    <path ed:tosuperid="136" id="137" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,269.84)" ed:parentid="101" fill="#fa8556" stroke-linecap="round" stroke="#fa8556" d="M17,36.2C17.7,37.8,19.2,38.5,20.5,37.9C21.8,37.4,22.3,35.8,21.6,34.2C20.6,32.1,19.7,29.9,18.8,27.8C17.9,25.7,17,23.5,16.2,21.4C15.3,19.2,14.5,17.1,13.6,14.9C12.8,12.7,12,10.5,11.2,8.3C10.4,6.2,9.6,4,8.8,1.8C8,-0.4,7.2,-2.6,6.4,-4.8C5.6,-7,4.8,-9.2,4,-11.4C3.1,-13.6,2.3,-15.8,1.5,-17.9C0.6,-20.1,-0.2,-22.3,-1.1,-24.5C-2,-26.7,-2.9,-28.8,-3.8,-31C-4.7,-33.1,-5.7,-35.3,-6.7,-37.4C-7.7,-39.5,-8.7,-41.6,-9.8,-43.7C-10.9,-45.8,-12,-47.9,-13.2,-49.9C-14.4,-52,-15.6,-54,-16.9,-56C-18.2,-57.9,-19.6,-59.8,-21.1,-61.7C-22.5,-63.6,-24.1,-65.4,-25.7,-67.1C-27.3,-68.8,-29.1,-70.4,-30.9,-72C-32.7,-73.5,-34.6,-74.9,-36.6,-76.1C-38.7,-77.4,-40.7,-78.5,-42.9,-79.5C-45.1,-80.5,-47.4,-81.2,-49.6,-81.9C-51.9,-82.5,-54.1,-83,-56.6,-83.3C-59,-83.5,-61.8,-83.6,-64.5,-83.7C-64.8,-83.7,-65.1,-83.5,-65.1,-83.2C-65.1,-82.9,-64.8,-82.7,-64.5,-82.7C-61.8,-82.5,-59.1,-82.4,-56.7,-82.1C-54.3,-81.7,-52.2,-81.2,-50,-80.5C-47.8,-79.9,-45.7,-79.1,-43.6,-78.1C-41.5,-77.1,-39.5,-76,-37.6,-74.7C-35.7,-73.4,-33.9,-72,-32.1,-70.5C-30.4,-69,-28.8,-67.4,-27.3,-65.7C-25.7,-63.9,-24.3,-62.2,-22.9,-60.3C-21.5,-58.5,-20.2,-56.6,-19,-54.6C-17.8,-52.7,-16.6,-50.7,-15.5,-48.6C-14.4,-46.6,-13.3,-44.6,-12.3,-42.5C-11.3,-40.4,-10.4,-38.3,-9.4,-36.2C-8.5,-34,-7.6,-31.9,-6.8,-29.7C-5.9,-27.6,-5.1,-25.4,-4.2,-23.3C-3.4,-21.1,-2.6,-18.9,-1.9,-16.7C-1.1,-14.5,-0.3,-12.3,0.4,-10.1C1.2,-7.9,1.9,-5.7,2.7,-3.5C3.4,-1.3,4.2,0.9,4.9,3.1C5.7,5.4,6.4,7.6,7.2,9.8C7.9,12,8.7,14.2,9.5,16.4C10.2,18.6,11,20.8,11.8,23C12.6,25.2,13.5,27.4,14.3,29.6C15.2,31.8,16.1,34,17,36.2z"/>
    <path ed:tosuperid="138" id="139" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,336.39)" ed:parentid="101" fill="#6cc9e5" stroke-linecap="round" stroke="#6cc9e5" d="M-0.4,3C1.2,3.7,2.8,3.1,3.3,1.8C3.8,0.5,3.1,-1,1.4,-1.6C-0.8,-2.4,-3,-3.2,-5.2,-4C-7.4,-4.8,-9.6,-5.6,-11.8,-6.4C-14,-7.2,-16.2,-8,-18.4,-8.8C-20.6,-9.6,-22.8,-10.3,-25.1,-11C-27.3,-11.7,-29.6,-12.4,-31.9,-13C-34.1,-13.6,-36.4,-14.2,-38.7,-14.7C-41,-15.2,-43.4,-15.6,-45.7,-16C-48,-16.3,-50.3,-16.6,-52.7,-16.8C-55.1,-17,-57.7,-17.1,-59.7,-17.2C-61.7,-17.2,-63.1,-17.2,-64.5,-17.1C-64.8,-17.1,-65.1,-16.9,-65.1,-16.6C-65.1,-16.4,-64.8,-16.1,-64.5,-16.1C-63.1,-16.1,-61.8,-16,-59.8,-15.9C-57.8,-15.7,-55.3,-15.5,-52.9,-15.1C-50.5,-14.8,-48.3,-14.4,-46.1,-13.9C-43.8,-13.4,-41.6,-12.9,-39.3,-12.2C-37.1,-11.6,-34.9,-10.9,-32.7,-10.2C-30.5,-9.5,-28.3,-8.7,-26.2,-7.9C-24,-7,-21.9,-6.2,-19.7,-5.3C-17.6,-4.4,-15.4,-3.5,-13.3,-2.6C-11.2,-1.6,-9,-0.7,-6.9,0.2C-4.7,1.2,-2.6,2.1,-0.4,3z"/>
    <path ed:tosuperid="140" id="141" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,402.94)" ed:parentid="101" fill="#ffcd55" stroke-linecap="round" stroke="#ffcd55" d="M12.8,-10C14,-11.4,13.8,-13.1,12.7,-13.9C11.6,-14.8,9.9,-14.5,8.9,-13C7.5,-11.1,6.1,-9.2,4.8,-7.3C3.4,-5.4,2.1,-3.4,0.8,-1.5C-0.5,0.4,-1.8,2.4,-3.1,4.3C-4.4,6.2,-5.7,8.2,-7.1,10.1C-8.4,12,-9.7,13.9,-11.1,15.7C-12.5,17.6,-13.9,19.4,-15.3,21.3C-16.7,23.1,-18.2,24.8,-19.7,26.6C-21.2,28.3,-22.8,30,-24.4,31.6C-26.1,33.2,-27.7,34.8,-29.5,36.2C-31.3,37.7,-33.1,39.1,-35,40.3C-36.9,41.6,-38.9,42.8,-41,43.8C-43,44.8,-45.2,45.7,-47.3,46.5C-49.4,47.2,-51.6,47.8,-54,48.3C-56.3,48.7,-59,49.1,-60.8,49.2C-62.6,49.4,-63.5,49.4,-64.5,49.4C-64.8,49.4,-65.1,49.6,-65.1,49.9C-65.1,50.2,-64.8,50.4,-64.5,50.4C-63.5,50.4,-62.6,50.5,-60.7,50.4C-58.9,50.3,-56.2,50.1,-53.7,49.7C-51.2,49.3,-49,48.8,-46.8,48.1C-44.5,47.4,-42.3,46.6,-40.1,45.6C-37.9,44.6,-35.8,43.5,-33.8,42.2C-31.8,41,-29.8,39.7,-27.9,38.2C-26.1,36.8,-24.2,35.2,-22.5,33.6C-20.7,32,-19.1,30.4,-17.4,28.7C-15.8,26.9,-14.2,25.2,-12.7,23.4C-11.2,21.6,-9.7,19.8,-8.2,17.9C-6.8,16.1,-5.3,14.2,-3.9,12.3C-2.5,10.5,-1.1,8.6,0.3,6.7C1.7,4.8,3.1,3,4.4,1.1C5.8,-0.8,7.2,-2.7,8.6,-4.5C10,-6.4,11.4,-8.2,12.8,-10z"/>
    <path ed:tosuperid="152" id="153" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,436.21)" ed:parentid="101" fill="#5fb7f1" stroke-linecap="round" stroke="#5fb7f1" d="M21.6,-34.2C22.3,-35.8,21.8,-37.4,20.5,-37.9C19.2,-38.5,17.7,-37.8,17,-36.2C16.1,-34,15.2,-31.8,14.3,-29.6C13.5,-27.4,12.6,-25.2,11.8,-23C11,-20.8,10.2,-18.6,9.5,-16.4C8.7,-14.2,7.9,-12,7.2,-9.8C6.4,-7.6,5.7,-5.4,4.9,-3.1C4.2,-0.9,3.4,1.3,2.7,3.5C1.9,5.7,1.2,7.9,0.4,10.1C-0.3,12.3,-1.1,14.5,-1.9,16.7C-2.6,18.9,-3.4,21.1,-4.2,23.3C-5.1,25.4,-5.9,27.6,-6.8,29.7C-7.6,31.9,-8.5,34,-9.4,36.2C-10.4,38.3,-11.3,40.4,-12.3,42.5C-13.3,44.6,-14.4,46.6,-15.5,48.6C-16.6,50.7,-17.8,52.7,-19,54.6C-20.2,56.6,-21.5,58.5,-22.9,60.3C-24.3,62.2,-25.7,63.9,-27.3,65.7C-28.8,67.4,-30.4,69,-32.1,70.5C-33.9,72,-35.7,73.4,-37.6,74.7C-39.5,76,-41.5,77.1,-43.6,78.1C-45.7,79.1,-47.8,79.9,-50,80.5C-52.2,81.2,-54.3,81.7,-56.7,82.1C-59.1,82.4,-61.8,82.5,-64.5,82.7C-64.8,82.7,-65.1,82.9,-65.1,83.2C-65.1,83.5,-64.8,83.7,-64.5,83.7C-61.8,83.6,-59,83.5,-56.6,83.3C-54.1,83,-51.9,82.5,-49.6,81.9C-47.4,81.2,-45.1,80.5,-42.9,79.5C-40.7,78.5,-38.7,77.4,-36.6,76.1C-34.6,74.9,-32.7,73.5,-30.9,72C-29.1,70.4,-27.3,68.8,-25.7,67.1C-24.1,65.4,-22.5,63.6,-21.1,61.7C-19.6,59.8,-18.2,57.9,-16.9,56C-15.6,54,-14.4,52,-13.2,49.9C-12,47.9,-10.9,45.8,-9.8,43.7C-8.7,41.6,-7.7,39.5,-6.7,37.4C-5.7,35.3,-4.7,33.1,-3.8,31C-2.9,28.8,-2,26.7,-1.1,24.5C-0.2,22.3,0.6,20.1,1.5,17.9C2.3,15.8,3.1,13.6,4,11.4C4.8,9.2,5.6,7,6.4,4.8C7.2,2.6,8,0.4,8.8,-1.8C9.6,-4,10.4,-6.2,11.2,-8.3C12,-10.5,12.8,-12.7,13.6,-14.9C14.5,-17.1,15.3,-19.2,16.2,-21.4C17,-23.5,17.9,-25.7,18.8,-27.8C19.7,-29.9,20.6,-32.1,21.6,-34.2z"/>
    <path ed:tosuperid="154" id="155" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,369.66)" ed:parentid="101" fill="#f1a3dc" stroke-linecap="round" stroke="#f1a3dc" d="M1.4,1.6C3.1,1,3.8,-0.5,3.3,-1.8C2.8,-3.1,1.2,-3.7,-0.4,-3C-2.6,-2.1,-4.7,-1.2,-6.9,-0.2C-9,0.7,-11.2,1.6,-13.3,2.6C-15.4,3.5,-17.6,4.4,-19.7,5.3C-21.9,6.2,-24,7,-26.2,7.9C-28.3,8.7,-30.5,9.5,-32.7,10.2C-34.9,10.9,-37.1,11.6,-39.3,12.2C-41.6,12.9,-43.8,13.4,-46.1,13.9C-48.3,14.4,-50.5,14.8,-52.9,15.1C-55.3,15.5,-57.8,15.7,-59.8,15.9C-61.8,16,-63.1,16.1,-64.5,16.1C-64.8,16.1,-65.1,16.4,-65.1,16.6C-65.1,16.9,-64.8,17.1,-64.5,17.1C-63.1,17.2,-61.7,17.2,-59.7,17.2C-57.7,17.1,-55.1,17,-52.7,16.8C-50.3,16.6,-48,16.3,-45.7,16C-43.4,15.6,-41,15.2,-38.7,14.7C-36.4,14.2,-34.1,13.6,-31.9,13C-29.6,12.4,-27.3,11.7,-25.1,11C-22.8,10.3,-20.6,9.6,-18.4,8.8C-16.2,8,-14,7.2,-11.8,6.4C-9.6,5.6,-7.4,4.8,-5.2,4C-3,3.2,-0.8,2.4,1.4,1.6z"/>
    <path ed:tosuperid="156" id="157" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,502.76)" ed:parentid="101" fill="#2d99ec" stroke-linecap="round" stroke="#2d99ec" d="M29.6,-94.7C30.1,-96.4,29.3,-97.9,28,-98.2C26.7,-98.6,25.2,-97.7,24.8,-96C24.2,-93.7,23.7,-91.4,23.1,-89.1C22.6,-86.8,22.1,-84.5,21.6,-82.2C21.1,-79.9,20.7,-77.6,20.2,-75.3C19.8,-73,19.4,-70.7,19,-68.4C18.6,-66.1,18.2,-63.8,17.8,-61.5C17.5,-59.1,17.1,-56.8,16.8,-54.5C16.4,-52.2,16.1,-49.9,15.8,-47.6C15.5,-45.2,15.1,-42.9,14.8,-40.6C14.5,-38.3,14.2,-36,13.9,-33.7C13.7,-31.3,13.4,-29,13.1,-26.7C12.8,-24.4,12.5,-22.1,12.3,-19.7C12,-17.4,11.7,-15.1,11.4,-12.8C11.2,-10.5,10.9,-8.2,10.6,-5.8C10.3,-3.5,10.1,-1.2,9.8,1.1C9.5,3.4,9.2,5.7,8.9,8.1C8.7,10.4,8.4,12.7,8.1,15C7.8,17.3,7.5,19.6,7.2,21.9C6.9,24.2,6.6,26.5,6.2,28.9C5.9,31.2,5.6,33.5,5.3,35.8C4.9,38.1,4.6,40.4,4.2,42.7C3.8,45,3.5,47.3,3.1,49.6C2.7,51.9,2.3,54.2,1.9,56.4C1.4,58.7,1,61,0.6,63.3C0.1,65.6,-0.4,67.8,-0.9,70.1C-1.4,72.4,-1.9,74.7,-2.5,76.9C-3,79.2,-3.6,81.4,-4.2,83.7C-4.8,85.9,-5.4,88.1,-6.1,90.4C-6.8,92.6,-7.5,94.8,-8.2,97C-9,99.2,-9.8,101.4,-10.6,103.5C-11.5,105.7,-12.4,107.8,-13.3,109.9C-14.3,112,-15.3,114.1,-16.4,116.2C-17.4,118.2,-18.6,120.2,-19.8,122.2C-21,124.1,-22.3,126.1,-23.7,127.9C-25.1,129.8,-26.5,131.5,-28.1,133.2C-29.7,134.9,-31.3,136.5,-33.1,138C-34.9,139.5,-36.7,140.8,-38.7,142C-40.6,143.3,-42.7,144.3,-44.8,145.3C-46.9,146.2,-49,146.9,-51.3,147.5C-53.5,148.1,-55.9,148.6,-58.1,148.8C-60.3,149.1,-62.4,149.2,-64.5,149.2C-64.8,149.2,-65.1,149.5,-65.1,149.7C-65.1,150,-64.8,150.2,-64.5,150.2C-62.3,150.2,-60.2,150.2,-57.9,149.9C-55.7,149.7,-53.3,149.3,-51,148.7C-48.7,148.1,-46.4,147.4,-44.3,146.4C-42.1,145.5,-40,144.5,-37.9,143.2C-35.9,142,-34,140.6,-32.1,139.1C-30.3,137.6,-28.6,136,-26.9,134.3C-25.3,132.6,-23.8,130.8,-22.3,128.9C-20.9,127.1,-19.5,125.1,-18.3,123.1C-17,121.2,-15.8,119.1,-14.7,117.1C-13.6,115,-12.5,112.9,-11.5,110.7C-10.5,108.6,-9.6,106.5,-8.7,104.3C-7.8,102.1,-7,99.9,-6.2,97.7C-5.4,95.5,-4.6,93.3,-3.9,91C-3.2,88.8,-2.5,86.6,-1.9,84.3C-1.2,82,-0.6,79.8,-0,77.5C0.6,75.3,1.1,73,1.6,70.7C2.2,68.4,2.7,66.1,3.2,63.8C3.7,61.6,4.2,59.3,4.6,57C5.1,54.7,5.5,52.4,5.9,50.1C6.4,47.8,6.8,45.5,7.2,43.2C7.6,40.9,7.9,38.6,8.3,36.2C8.7,33.9,9.1,31.6,9.4,29.3C9.8,27,10.1,24.7,10.4,22.4C10.8,20.1,11.1,17.8,11.4,15.4C11.8,13.1,12.1,10.8,12.4,8.5C12.7,6.2,13,3.9,13.3,1.6C13.7,-0.8,14,-3.1,14.3,-5.4C14.6,-7.7,14.9,-10,15.2,-12.3C15.5,-14.6,15.8,-16.9,16.1,-19.3C16.4,-21.6,16.7,-23.9,17.1,-26.2C17.4,-28.5,17.7,-30.8,18,-33.1C18.3,-35.4,18.7,-37.7,19,-40C19.3,-42.3,19.7,-44.6,20,-46.9C20.4,-49.2,20.7,-51.5,21.1,-53.8C21.5,-56.1,21.9,-58.4,22.3,-60.7C22.7,-63,23.1,-65.3,23.5,-67.6C23.9,-69.9,24.4,-72.1,24.8,-74.4C25.3,-76.7,25.8,-79,26.3,-81.2C26.8,-83.5,27.3,-85.7,27.9,-88C28.4,-90.2,29,-92.4,29.6,-94.7z"/>
    <path ed:tosuperid="158" id="159" stroke-linejoin="round" transform="matrix(1,0,0,1,399.46,469.49)" ed:parentid="101" fill="#ff7575" stroke-linecap="round" stroke="#ff7575" d="M26.6,-63.4C27.2,-65.1,26.5,-66.6,25.2,-67.1C23.9,-67.5,22.4,-66.7,21.9,-65C21.2,-62.7,20.5,-60.5,19.9,-58.2C19.2,-55.9,18.6,-53.7,18,-51.4C17.5,-49.1,16.9,-46.8,16.3,-44.5C15.8,-42.3,15.3,-40,14.8,-37.7C14.3,-35.4,13.8,-33.1,13.3,-30.8C12.8,-28.5,12.3,-26.2,11.9,-24C11.4,-21.7,11,-19.4,10.5,-17.1C10.1,-14.8,9.6,-12.5,9.2,-10.2C8.7,-7.9,8.3,-5.6,7.8,-3.3C7.4,-1,7,1.3,6.5,3.5C6.1,5.8,5.6,8.1,5.2,10.4C4.7,12.7,4.2,15,3.8,17.3C3.3,19.5,2.8,21.8,2.3,24.1C1.9,26.4,1.4,28.6,0.8,30.9C0.3,33.2,-0.2,35.4,-0.8,37.7C-1.3,40,-1.9,42.2,-2.5,44.5C-3.1,46.7,-3.7,48.9,-4.3,51.2C-5,53.4,-5.6,55.6,-6.3,57.8C-7,60.1,-7.8,62.3,-8.6,64.4C-9.3,66.6,-10.2,68.8,-11,70.9C-11.9,73.1,-12.8,75.2,-13.8,77.3C-14.7,79.4,-15.7,81.5,-16.8,83.5C-17.9,85.6,-19.1,87.6,-20.3,89.5C-21.5,91.5,-22.8,93.4,-24.2,95.2C-25.6,97,-27.1,98.8,-28.7,100.5C-30.3,102.1,-32,103.7,-33.7,105.2C-35.5,106.6,-37.4,108,-39.4,109.1C-41.3,110.3,-43.4,111.4,-45.5,112.3C-47.6,113.1,-49.8,113.9,-52,114.4C-54.3,115,-56.8,115.4,-58.9,115.6C-60.9,115.9,-62.7,115.9,-64.5,116C-64.8,116,-65.1,116.2,-65.1,116.5C-65.1,116.7,-64.8,117,-64.5,117C-62.7,116.9,-60.9,116.9,-58.7,116.7C-56.6,116.5,-54.1,116.2,-51.8,115.6C-49.4,115.1,-47.2,114.4,-45,113.5C-42.8,112.7,-40.6,111.6,-38.6,110.4C-36.5,109.2,-34.6,107.9,-32.7,106.4C-30.9,105,-29.1,103.4,-27.4,101.7C-25.8,100,-24.2,98.2,-22.8,96.4C-21.3,94.5,-19.9,92.6,-18.6,90.6C-17.3,88.6,-16.1,86.6,-15,84.6C-13.8,82.5,-12.7,80.4,-11.7,78.3C-10.7,76.2,-9.7,74,-8.8,71.9C-7.9,69.7,-7,67.5,-6.2,65.3C-5.4,63.1,-4.6,60.9,-3.8,58.7C-3.1,56.5,-2.3,54.2,-1.7,52C-1,49.7,-0.3,47.5,0.3,45.2C1,43,1.6,40.7,2.2,38.5C2.8,36.2,3.4,33.9,3.9,31.6C4.5,29.4,5,27.1,5.6,24.8C6.1,22.5,6.6,20.3,7.1,18C7.7,15.7,8.2,13.4,8.7,11.1C9.2,8.9,9.6,6.6,10.1,4.3C10.6,2,11.1,-0.3,11.6,-2.6C12.1,-4.8,12.6,-7.1,13,-9.4C13.5,-11.7,14,-14,14.5,-16.2C15,-18.5,15.5,-20.8,16,-23.1C16.5,-25.4,17,-27.6,17.5,-29.9C18.1,-32.2,18.6,-34.4,19.1,-36.7C19.7,-38.9,20.2,-41.2,20.8,-43.4C21.4,-45.7,22,-47.9,22.6,-50.2C23.2,-52.4,23.9,-54.6,24.5,-56.8C25.2,-59,25.9,-61.2,26.6,-63.4z"/>
    <path ed:tosuperid="160" id="161" stroke-linejoin="round" transform="matrix(1,0,0,1,886.4,141.61)" ed:parentid="110" stroke-linecap="round" fill="none" stroke="#5fb7f1" stroke-width="2" d="M-17.5,8.3C-1.6,8.3,2.5,-8.3,17.5,-8.3"/>
    <path ed:tosuperid="162" id="163" stroke-linejoin="round" transform="matrix(1,0,0,1,886.4,158.14)" ed:parentid="110" stroke-linecap="round" fill="none" stroke="#5fb7f1" stroke-width="2" d="M-17.5,-8.3C-1.6,-8.3,2.5,8.3,17.5,8.3"/>
    <g id="101" ed:height="131.85145" transform="matrix(1,0,0,1,398,287.1)" ed:topictype="mainidea" ed:layout="map" ed:width="131.85145">
        <path fill-opacity="0.2" fill="#000000" d="M-1.3,65.9C-1.3,28.8,28.8,-1.3,65.9,-1.3C103.1,-1.3,133.2,28.8,133.2,65.9C133.2,103.1,103.1,133.2,65.9,133.2C28.8,133.2,-1.3,103.1,-1.3,65.9z"/>
        <path stroke-linejoin="round" fill="#ffffff" stroke="#00b050" stroke-width="4" d="M0,65.9C0,29.5,29.5,0,65.9,0C102.3,0,131.9,29.5,131.9,65.9C131.9,102.3,102.3,131.9,65.9,131.9C29.5,131.9,0,102.3,0,65.9z"/>
        <use transform="translate(32.47,32.58)" width="68" height="67" x="0" y="0" xlink:href="#image2"/>
    </g>
    <symbol id="image2">
        <image width="100%" height="100%" preserveAspectRatio="none" xlink:href=""/>
    </symbol>
    <g id="110" ed:height="33.55" transform="matrix(1,0,0,1,592.85,116.32)" ed:parentid="101" ed:layout="rightmap" ed:width="276">
        <path stroke-linejoin="round" fill="none" stroke="#5fb7f1" stroke-width="2" d="M0,33.5L276,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">高等代数（</tspan>
            <tspan style="white-space:pre" x="97" class="st6">手写笔记，两个版本</tspan>
            <tspan style="white-space:pre" x="241">）</tspan>
        </text>
    </g>
    <g id="112" ed:height="33.55" transform="matrix(1,0,0,1,592.85,40.25)" ed:parentid="101" ed:layout="rightmap" ed:width="285.8">
        <path stroke-linejoin="round" fill="none" stroke="#ff7575" stroke-width="2" d="M0,33.5L285.8,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">数学分析（思维导图）【A、B】</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;超链接1&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/mathematical-analysis-index-/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(253,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <symbol id="imghyperlink">
        <image width="16" height="16" xlink:href=""/>
    </symbol>
    <g id="194" ed:height="33.55" transform="matrix(1,0,0,1,592.85,465.6)" ed:parentid="101" ed:layout="rightmap" ed:width="275.4">
        <path stroke-linejoin="round" fill="none" stroke="#fa8556" stroke-width="2" d="M0,33.5L275.4,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">概率论（思维导图+手写笔记）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/probability-theory-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(243,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="118" ed:height="33.55" transform="matrix(1,0,0,1,592.85,265.95)" ed:parentid="101" ed:layout="rightmap" ed:width="313">
        <path stroke-linejoin="round" fill="none" stroke="#f1a3dc" stroke-width="2" d="M0,33.5L313,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">实变函数（手写笔记，知识点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;超链接1&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/real-variable-function-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(280,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="120" ed:height="33.55" transform="matrix(1,0,0,1,75.6,219.65)" ed:parentid="101" ed:layout="leftmap" ed:width="259.4">
        <path stroke-linejoin="round" fill="none" stroke="#80cf70" stroke-width="2" d="M0,33.5L259.4,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">图论（思维导图+手写笔记）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/graph-theory-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(227,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="122" ed:height="33.55" transform="matrix(1,0,0,1,118,20)" ed:parentid="101" ed:layout="leftmap" ed:width="217">
        <path stroke-linejoin="round" fill="none" stroke="#58d5d5" stroke-width="2" d="M0,33.5L217,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">泛函分析（思维导图）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;超链接1&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/real-variable-function-index--/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(184,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="124" ed:height="33.55" transform="matrix(1,0,0,1,592.85,399.05)" ed:parentid="101" ed:layout="rightmap" ed:width="329">
        <path stroke-linejoin="round" fill="none" stroke="#80cf70" stroke-width="2" d="M0,33.5L329,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">偏微分方程（</tspan>
            <tspan style="white-space:pre" x="113" class="st7">随堂笔记，有证明过程</tspan>
            <tspan style="white-space:pre" x="273">）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/partial-differential-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(296,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="126" ed:height="33.55" transform="matrix(1,0,0,1,22,86.55)" ed:parentid="101" ed:layout="leftmap" ed:width="313">
        <path stroke-linejoin="round" fill="none" stroke="#a98ae7" stroke-width="2" d="M0,33.5L313,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">数值分析（手写笔记，知识点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/numerical-analysis-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(280,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="142" ed:height="33.55" transform="matrix(1,0,0,1,592.85,532.15)" ed:parentid="101" ed:layout="rightmap" ed:width="313">
        <path stroke-linejoin="round" fill="none" stroke="#a98ae7" stroke-width="2" d="M0,33.5L313,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">数理统计（手写笔记，知识点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/mathematical-statistics-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(280,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="148" ed:height="33.55" transform="matrix(1,0,0,1,592.85,598.7)" ed:parentid="101" ed:layout="rightmap" ed:width="291.4">
        <path stroke-linejoin="round" fill="none" stroke="#58d5d5" stroke-width="2" d="M0,33.5L291.4,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">随机过程（思维导图+手写笔记）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/random-process-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(259,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="150" ed:height="33.55" transform="matrix(1,0,0,1,592.85,332.5)" ed:parentid="101" ed:layout="rightmap" ed:width="329">
        <path stroke-linejoin="round" fill="none" stroke="#6cc9e5" stroke-width="2" d="M0,33.5L329,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">常微分方程（手写笔记，知识点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/ordinary-differential-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(296,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="133" ed:height="33.55" transform="matrix(1,0,0,1,592.85,199.4)" ed:parentid="101" ed:layout="rightmap" ed:width="521">
        <path stroke-linejoin="round" fill="none" stroke="#ffcd55" stroke-width="2" d="M0,33.5L521,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">复变函数（手写笔记）【复习用的比较潦草，只有一些重要定理】</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;超链接1&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/ceN7MrWqV4Ml&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(488,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="136" ed:height="33.55" transform="matrix(1,0,0,1,86,153.1)" ed:parentid="101" ed:layout="leftmap" ed:width="249">
        <path stroke-linejoin="round" fill="none" stroke="#fa8556" stroke-width="2" d="M0,33.5L249,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">微分几何（期末考点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/differential-geometry-index&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(216,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="138" ed:height="33.55" transform="matrix(1,0,0,1,54,286.2)" ed:parentid="101" ed:layout="leftmap" ed:width="281">
        <path stroke-linejoin="round" fill="none" stroke="#6cc9e5" stroke-width="2" d="M0,33.5L281,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">运筹与最优化（课后习题总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/operations-research-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(248,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="140" ed:height="33.55" transform="matrix(1,0,0,1,22,419.3)" ed:parentid="101" ed:layout="leftmap" ed:width="313">
        <path fill="#ffff00" d="M0,0L313,0L313,33.5L0,33.5L0,0z"/>
        <path stroke-linejoin="round" fill="none" stroke="#ffcd55" stroke-width="2" d="M0,33.5L313,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">电路电子学（</tspan>
            <tspan style="white-space:pre" x="113" class="st7">随堂笔记，较为详细</tspan>
            <tspan style="white-space:pre" x="257">）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/circuit-electronic-index&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(280,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="152" ed:height="33.55" transform="matrix(1,0,0,1,22,485.85)" ed:parentid="101" ed:layout="leftmap" ed:width="313">
        <path fill="#ffff00" d="M0,0L313,0L313,33.5L0,33.5L0,0z"/>
        <path stroke-linejoin="round" fill="none" stroke="#5fb7f1" stroke-width="2" d="M0,33.5L313,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">普通地质学（</tspan>
            <tspan style="white-space:pre" x="113" class="st7">随堂笔记，较为详细</tspan>
            <tspan style="white-space:pre" x="257">）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;超链接1&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/general-geology-index&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(280,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="154" ed:height="33.55" transform="matrix(1,0,0,1,38,352.75)" ed:parentid="101" ed:layout="leftmap" ed:width="297">
        <path fill="#ffff00" d="M0,0L297,0L297,33.5L0,33.5L0,0z"/>
        <path stroke-linejoin="round" fill="none" stroke="#f1a3dc" stroke-width="2" d="M0,33.5L297,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">数据结构与算法（期末考点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/data-structure-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(264,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="156" ed:height="33.55" transform="matrix(1,0,0,1,86,618.95)" ed:parentid="101" ed:layout="leftmap" ed:width="249">
        <path fill="#ffff00" d="M0,0L249,0L249,33.5L0,33.5L0,0z"/>
        <path stroke-linejoin="round" fill="none" stroke="#2d99ec" stroke-width="2" d="M0,33.5L249,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">工程力学（期末考点总结）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/engineering-mechanics-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(216,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="158" ed:height="33.55" transform="matrix(1,0,0,1,43.6,552.4)" ed:parentid="101" ed:layout="leftmap" ed:width="291.4">
        <path fill="#ffff00" d="M0,0L291.4,0L291.4,33.5L0,33.5L0,0z"/>
        <path stroke-linejoin="round" fill="none" stroke="#ff7575" stroke-width="2" d="M0,33.5L291.4,33.5"/>
        <text class="st5">
            <tspan style="white-space:pre" x="17" y="23.4">大学化学（思维导图+手写笔记）</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/university-chemistry-index&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(259,9)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="160" ed:height="26.55" transform="matrix(1,0,0,1,903.95,106.8)" ed:parentid="110" ed:layout="rightmap" ed:width="157.4">
        <path stroke-linejoin="round" fill="none" stroke="#5fb7f1" stroke-width="2" d="M0,26.6L157.4,26.6"/>
        <text class="st8">
            <tspan style="white-space:pre" x="8" y="19.8">知识点总结版本</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/advanced-algebra-index/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(133,5)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g id="162" ed:height="26.55" transform="matrix(1,0,0,1,903.95,139.85)" ed:parentid="110" ed:layout="rightmap" ed:width="223.8">
        <path stroke-linejoin="round" fill="none" stroke="#5fb7f1" stroke-width="2" d="M0,26.6L223.8,26.6"/>
        <text class="st8">
            <tspan style="white-space:pre" x="8" y="19.8">丘维声老师网课板书笔记</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/qiu-online-course-index-/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(199,5)" xlink:href="#imghyperlink"/>
        </g>
    </g>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Ow0KdmFyIHVhID0gKG11YS5pbmRleE9mKCdydjoxMScpICsgbXVhLmluZGV4T2YoJ01TSUUnKSkgPj0gMDsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmctY29udGFpbmVyJykub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChldmVudCkgew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQp9DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZnLWNvbnRhaW5lcicpLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgaWYgKGV2ZW50LndoaWNoID09IDMpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQogICAgICAgIHRoaXMub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsNCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnkoLShldi5tb3ZlbWVudFgpLCAwKTsNCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtKGV2Lm1vdmVtZW50WSkpDQogICAgICAgIH0NCiAgICAgICAgdGhpcy5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmN1cnNvciA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2V1cCA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2Vtb3ZlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCk51bWJlci5wcm90b3R5cGUudG9zdWl0c3ZnID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBudW0gPSB0aGlzLnZhbHVlT2YoKTsNCiAgICBpZiAobnVtICUgMSA9PT0gMCkgew0KICAgICAgICByZXR1cm4gbnVtICsgMC41DQogICAgfSBlbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzeiA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbnVtID0gdGhpcy52YWx1ZU9mKCk7DQogICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtOw0KfTsNCmZ1bmN0aW9uIHBhcnNlRGF0ZShudW0pIHsNCiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG51bSk7DQogICAgdmFyIFkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7DQogICAgdmFyIE0gPSAoZGF0ZS5nZXRNb250aCgpICsgMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG1tICsgczsNCn0NCi8vLS1wcmVkZWZpbmVkDQovL2NvbW1lbnQtLQ0KDQpmdW5jdGlvbiBnZXRjd2gocG9wdXApIHsNCiAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgdmFyIHcgPSBwb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCiAgICByZXR1cm4gW3csIGhdDQp9DQpzdmdFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN2ZyIpOw0KZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAvLyB2YXIgY29tbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdmc6bnRoLWNoaWxkKCcgKyBpbmRleCArICcpIGc+Z1tlZFxcOmNvbW1lbnRdJyk7DQogICAgdmFyIGNvbW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3ZnOm50aC1jaGlsZCgke2luZGV4fSkgZz5nW2VkXFw6Y29tbWVudF1gKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgb2xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgY29tbWVudHNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoY29tbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdlZDpjb21tZW50JykpOw0KICAgICAgICB2YXIgaGVpZ2h0ID0gMDsNCiAgICAgICAgdmFyIGNhcnIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICB2YXIgc3RhbXAgPSBOdW1iZXIoYVtqXS5EYXRlKSAqIDEwMDA7DQogICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgICAgICB2YXIgbmFtZSA9IGFbal0uTmFtZTsNCiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gYVtqXS5NZXNzYWdlOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2VBcnIgPSBtZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCd4JywgNSk7DQogICAgICAgICAgICBuLnNldEF0dHJpYnV0ZSgneScsIDEyKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywgJyMwMDZlZmYnKTsNCiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuYW1lICsgJzogJzsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd4JywgMjAwKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd5JywgMTIpOw0KICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzk2OTY5NicpOw0KICAgICAgICAgICAgdC50ZXh0Q29udGVudCA9IHRpbWU7DQogICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnZm9udC1zaXplJywgJzEwJyk7DQogICAgICAgICAgICBtLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgyMCwyNyknKTsNCiAgICAgICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzc2FnZUFyci5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIHZhciB0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndHNwYW4nKTsNCiAgICAgICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgICAgIHRzLnNldEF0dHJpYnV0ZSgneScsIGsgKiAxNik7DQogICAgICAgICAgICAgICAgdHMudGV4dENvbnRlbnQgPSBtZXNzYWdlQXJyW2tdOw0KICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKTsNCiAgICAgICAgICAgIG8uYXBwZW5kQ2hpbGQobik7DQogICAgICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICAgICAgby5hcHBlbmRDaGlsZChtKTsNCiAgICAgICAgICAgIGNhcnIucHVzaChvKTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICAgICAgaGVpZ2h0ID0gKG1lc3NhZ2VBcnIubGVuZ3RoICsgMSkgKiAxNiArIGhlaWdodDsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgd2FyciA9IGdldGN3aChwb3B1cCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneCcsICcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgIHZhciBvdyA9IHdhcnJbMF0gKyAxMC41Ow0KICAgICAgICB2YXIgb2ggPSB3YXJyWzFdICsgMzsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG93KTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvaCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNjU2NTY1Jyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgdmFyIGwgPSBjYXJyLmxlbmd0aDsNCiAgICAgICAgd2hpbGUgKGwtLSkgew0KICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY2FycltsXSk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBwb3B1cC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgY3MgPSBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcyA9IGNvbW1lbnRzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAndHInKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQocHBzWzFdKTsNCiAgICAgICAgICAgIHggPSB4LnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ21hJykgew0KICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICB2YXIgbWFBcnIgPSBbcGFyc2VGbG9hdChwcHNbMV0pLCBwYXJzZUZsb2F0KHBwc1szXSksIHBhcnNlRmxvYXQocHBzWzVdKSwgcGFyc2VGbG9hdChwcHNbN10pLCBwYXJzZUZsb2F0KHBwc1s5XSksIHBhcnNlRmxvYXQocHBzWzExXSldOw0KICAgICAgICAgICAgaWYgKG1hQXJyWzFdID09IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4MSA9IHgxLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgIHkxID0geTEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB5ID0gcGFyc2VGbG9hdChjc1sxXSk7DQogICAgICAgICAgICAgICAgdmFyIHgyID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgdmFyIGZ4ID0geDEgPCB4MiA/IHgxLnRvc3VpdHN2ZygpIDogeDIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIGZ5ID0geTEgPiB5MiA/IHkxLnRvc3VpdHN2ZygpIDogeTIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyBmeCArICcsJyArIGZ5ICsgJyknOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG9mZnkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd5JywgKC1vZmZ5KS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3RyYW5zcGFyZW50Jyk7DQogICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIHRyc3RyKTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdjb21tZW50JywgJycpOw0KICAgICAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsZXQgY29tbWVudGlkID0gY29tbWVudHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgY29tbWVudHNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpjb21tZW50aWQnLCBjb21tZW50aWQpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBjb21tZW50c1tpXS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmICghdWEpIHsNCiAgICBmdW5jdGlvbiBnZXR3aChzLCBwKSB7DQogICAgICAgIHZhciBtYWlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBtYWlucC5zdHlsZS5jc3NUZXh0ID0gczsNCiAgICAgICAgbWFpbnAuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7DQogICAgICAgIG1haW5wLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICBtYWlucC5pbm5lckhUTUwgPSBwOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5wKTsNCiAgICAgICAgdmFyIHcgPSBtYWlucC5jbGllbnRXaWR0aDsNCiAgICAgICAgdmFyIGggPSBtYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csIGhdDQogICAgfQ0KICAgIHN2Z0VsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnIik7DQogICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgdmFyIG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKSBnPmdbZWRcXDpub3RlXScpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IG5vdGVzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6bm90ZScpOw0KICAgICAgICAgICAgdmFyIG5vdGVMb2NrID0gbm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlbG9jaycpOw0KICAgICAgICAgICAgaWYgKG5vdGVMb2NrID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIG1haW5wID0gYS5tYXRjaCgvPGJvZHlbXj5dKj4oLiopPFwvYm9keT4vKVsxXTsNCiAgICAgICAgICAgIHZhciBtYWlucyA9IGEubWF0Y2goL3N0eWxlPSIoLio/KSIvKVsxXTsNCiAgICAgICAgICAgIHZhciBvdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBvbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgaG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjY2RjZGZmJyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbm90ZXNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgbm90ZXNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dCA9IG1haW5zOw0KICAgICAgICAgICAgcG9wdXAuaW5uZXJIVE1MID0gbWFpbnA7DQogICAgICAgICAgICB2YXIgd2ggPSBnZXR3aChtYWlucywgbWFpbnApOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdoWzBdKTsNCiAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2hbMV0pOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDgsNCknKTsNCiAgICAgICAgICAgIHBvcHVwLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnOw0KICAgICAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2hbMF0gKyAxNik7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHdoWzFdICsgOCk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjYTI3YTAwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZTc5ZCcpOw0KICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdub3RlJywgJycpOw0KICAgICAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBsZXQgbm90ZWlkID0gbm90ZXNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgbm90ZXNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ2VkOm5vdGVpZCcsIG5vdGVpZCk7DQogICAgICAgICAgICBvdXQub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBvdXQub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVSYW5nZSh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmUpOmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHZhciBjcyA9IG5vdGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciBwcyA9IG5vdGVzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgICAgIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ3RyJykgew0KICAgICAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHBwc1sxXSk7DQogICAgICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICAgICAgdmFyIG1hQXJyID0gW3BhcnNlRmxvYXQocHBzWzFdKSwgcGFyc2VGbG9hdChwcHNbM10pLCBwYXJzZUZsb2F0KHBwc1s1XSksIHBhcnNlRmxvYXQocHBzWzddKSwgcGFyc2VGbG9hdChwcHNbOV0pLCBwYXJzZUZsb2F0KHBwc1sxMV0pXTsNCiAgICAgICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoY3NbMV0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICAgICAgeDEgPSB4MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNlRmxvYXQoY3NbMV0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgICAgIHZhciBmeCA9IHgxIDwgeDIgPyB4MS50b3N1aXRzdmcoKSA6IHgyLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgZnggKyAnLCcgKyBmeSArICcpJzsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgneScsICgtb2ZmeSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChvdXQpOw0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgLy8gdmFyIG5vdGVpZCA9IG5vdGVpZDsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyB2YXIgbm90ZWlkID0gbm90ZWlkOw0KICAgICAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0gZWxzZSB7DQogICAgY29uc29sZS5sb2coJ+aKseatie+8jElF5rWP6KeI5Zmo5LiN5pSv5oyBbm90Zeino+aekO+8jOivt+S9v+eUqOWFtuS7luWGheaguOa1j+iniOWZqOOAguiwouiwou+8gScpDQp9DQovLy0tbm90ZQ0KLy9oeXBlcmxpbmstLQ0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFyciwgYnJyKSB7DQogICAgdmFyIGwgPSAwOw0KICAgIHZhciBsbCA9IDA7DQogICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgaWYgKCFpc05hTihsaW5rYXJyW2pdKSkgew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9ICdQYWdlLScgKyBhcnJbal07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gYXJyW2pdOw0KICAgICAgICB9DQogICAgICAgIGUuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICB2YXIgZXcgPSBlLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQgPSBicnJbal07DQogICAgICAgIGguc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGguc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodyA9IGguZ2V0QkJveCgpLndpZHRoOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5yZW1vdmVDaGlsZChoKTsNCiAgICAgICAgbCA9IGV3ID4gaHcgPyBldyA6IGh3Ow0KICAgICAgICBsbCA9IGwgPiBsbCA/IGwgOiBsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0Kc3ZnRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdmciKTsNCmZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gc3ZnRWxlbXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgbGV0IHN2Z0VsZW0gPSBzdmdFbGVtc1tpbmRleF07DQogICAgbGV0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnOm50aC1jaGlsZCgiICsgaW5kZXggKyAiKSBnPmdbZWRcXDpoeXBlcmxpbmtdIikNCiAgICBjb25zb2xlLmxvZyhsaW5rcyk7DQogICAgLy8gdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOmh5cGVybGlua10nKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgZGVzY2FyciA9IFtdOw0KICAgICAgICB2YXIgbGlua2FyciA9IFtdOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2NkY2RmZicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykpOw0KICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsaW5rc1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgICAgIHZhciBjcyA9IGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHBzID0gbGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpOw0KICAgICAgICBpZiAocHMuc3Vic3RyKDAsIDIpID09ICd0cicpIHsNCiAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIHBhcnNlRmxvYXQocHBzWzBdKTsNCiAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChwcHNbMV0pOw0KICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB5ID0geS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIHggKyAnLCcgKyB5ICsgJyknOw0KICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goLyhcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylcKSQvKTsNCiAgICAgICAgICAgIHZhciBtYUFyciA9IFtwYXJzZUZsb2F0KHBwc1sxXSksIHBhcnNlRmxvYXQocHBzWzNdKSwgcGFyc2VGbG9hdChwcHNbNV0pLCBwYXJzZUZsb2F0KHBwc1s3XSksIHBhcnNlRmxvYXQocHBzWzldKSwgcGFyc2VGbG9hdChwcHNbMTFdKV07DQogICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHgxID0geDEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4MSArICcsJyArIHkxICsgJyknOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHkgPSBwYXJzZUZsb2F0KGNzWzFdKTsNCiAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTIgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB2YXIgZnggPSB4MSA8IHgyID8geDEudG9zdWl0c3ZnKCkgOiB4Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgb2ZmeSA9IE1hdGguYWJzKHkxIC0geTIpOw0KICAgICAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIGZ4ICsgJywnICsgZnkgKyAnKSc7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ3knLCAoLW9mZnkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChwb3B1cFIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBhbCA9IGEubGVuZ3RoOw0KICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsOyBqKyspIHsNCiAgICAgICAgICAgIGxpbmthcnIucHVzaChhW2pdLmxpbmspOw0KICAgICAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgIHZhciBtYXggPSBnZXRtYXhsZW4obGlua2FyciwgZGVzY2Fycik7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYWw7IGsrKykgew0KICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2EnKTsNCiAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIGlmIChpc05hTihsaW5rYXJyW2tdKSkgew0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInhsaW5rIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCBsaW5rYXJyW2tdKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOw0KICAgICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBsaW5rYXJyW2tdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBlLnRleHRDb250ZW50ID0gJ1BhZ2UtJyArIGxpbmthcnJba107DQogICAgICAgICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAieGxpbmsiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpOw0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsICIjIiArIGxpbmthcnJba10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbWF4ICsgMTApOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICczMycpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjOTk5OTk5Jyk7DQogICAgICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLCAzMyAqIGspOw0KICAgICAgICAgICAgZi50ZXh0Q29udGVudCA9IGRlc2NhcnJba107DQogICAgICAgICAgICBmLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOw0KICAgICAgICAgICAgZi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOw0KICAgICAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMTIpOw0KICAgICAgICAgICAgZS5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JzsNCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMjgpOw0KICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGMuYXBwZW5kQ2hpbGQoZCk7DQogICAgICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICAgICAgYy5hcHBlbmRDaGlsZChlKTsNCiAgICAgICAgICAgIGMub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZmlsbCA9ICcjZTFlMWZmJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGMub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsID0gJ3doaXRlJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGMpOw0KICAgICAgICB9DQogICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywgJycpOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2VkOmxpbmtpZCcsIGxpbmtzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCArICIsIiArIGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBwb3B1cC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9ubW91c2VvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdmctY29udGFpbmVyID4gc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKScpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpsaW5raWQ9JyIgKyBsaW5raWQgKyAiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgLy8gcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8vIHZhciBsaW5raWQgPSB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIiArIGxpbmtpZCArICInXVtoeXBlcmxpbmtdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIC8vIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vLS1oeXBlcmxpbmsNCi8vaW5pdGlhbGl6ZS0tDQp2YXIgc2hhcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9ndG9waWNpZF0nKTsNCnZhciBtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlID0ge307DQp2YXIgZXh0cmFSZWxhID0ge307DQp2YXIgY2hlY2tJRCA9ICcnOw0KZm9yICh2YXIgaSA9IDA7IGkgPCBtSWQubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgdHlwZSA9IG1JZFtpXS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBzaWQgPSBtSWRbaV0uaWQ7DQogICAgaWYgKHR5cGUgIT09ICdjYWxsb3V0Jykgew0KICAgICAgICBpbml0KHNpZCwgZGF0YVRyZWUpDQogICAgfQ0KfQ0KZnVuY3Rpb24gaW5pdChpZCwgb2JqKSB7DQogICAgdmFyIGNoaWxkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddOm5vdChbZWRcXDp0b3BpY3R5cGVdKSIpOw0KICAgIHZhciBjYWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddW2VkXFw6dG9waWN0eXBlXSIpOw0KICAgIHZhciBzdW1tYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nc3VtbWFyeSddIik7DQogICAgdmFyIGJvdW5kYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpmcm9taWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgdmFyIHJlbGF0byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDp0b2lkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIG9ialsibSIgKyBpZF0gPSB7fTsNCiAgICB2YXIgdHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBpdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6aGVpZ2h0Jyk7DQogICAgaWYgKHR5cGUpIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS50eXBlID0gdHlwZTsNCiAgICB9DQogICAgaWYgKGl3ICYmIGloKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPSBpdzsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5oZWlnaHQgPSBpaDsNCiAgICB9DQogICAgaWYgKHJlbGFmcm9tLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYWZyb20ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBpbmRleGlkID0gcmVsYWZyb21baV0uaWQ7DQogICAgICAgICAgICB2YXIgdG9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9pZCcpOw0KICAgICAgICAgICAgaWYgKGV4dHJhUmVsYVtpbmRleGlkXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdID0gew0KICAgICAgICAgICAgICAgICAgICBpZDogaW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDogdG9pZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tW2luZGV4aWRdID0ge307DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tLmRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAocmVsYXRvLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0byA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGF0by5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGluZGV4aWQgPSByZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5kZXhpZCkuZ2V0QXR0cmlidXRlKCdlZDpmcm9taWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogZnJvbWlkLA0KICAgICAgICAgICAgICAgICAgICB0b2lkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0b1tpbmRleGlkXSA9IHt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndXNlJylbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykuc2xpY2UoMSk7DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnRvZ3R5cGUgPSB0b2c7DQogICAgICAgIH0NCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBjaGlsZHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jaGlsZCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmNhbGwgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNhbGxzW2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uY2FsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBib3VuZGFyeVtpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoc3VtbWFyeS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5zdW1tYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IHN1bW1hcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5zdW1tYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8vLS1pbml0aWFsaXplDQovL3RvZ2dsZWRpc3BsYXktLQ0KdmFyIGNoYWluQXJyID0gW107DQpmdW5jdGlvbiBnZXRjaGFpbihpZCkgew0KICAgIGNoYWluQXJyLnVuc2hpZnQoJ20nICsgaWQpOw0KICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmICghcGFyZW50KSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKHBhcmVudC5tYXRjaCgvXCwvKSkgew0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQubWF0Y2goL1xkKyg/PVwsKS8pWzBdDQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFyciA9IFtdOw0KICAgIGdldGNoYWluKGlkKTsNCiAgICB2YXIgbWFpbiA9IGNoYWluQXJyWzBdOw0KICAgIGlmIChjaGFpbkFyci5sZW5ndGggPiAxKSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhaW5BcnIpOw0KICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoYWluQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IGNoYWluQXJyW2ldOw0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgdmFyIGNvYmogPSBvYmpbT2JqZWN0LmtleXMob2JqKVtqXV1bYV07DQogICAgICAgICAgICAgICAgaWYgKGNvYmopIHsNCiAgICAgICAgICAgICAgICAgICAgb2JqID0gY29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0NCg0KfQ0KZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgew0KICAgIHNoYXBlW2ldLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpZCA9IE51bWJlcih0aGlzLmdldEF0dHJpYnV0ZSgnZWQ6dG9ndG9waWNpZCcpKTsNCiAgICAgICAgdmFyIG9iaiA9IGdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGUgPSBvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyA/ICdwbHVzJyA6ICdtaW51cyc7DQogICAgICAgIHZhciBkaXNwbGF5ID0gb2JqLnRvZ3R5cGUgPT09ICdtaW51cycgPyAnbm9uZScgOiAnYmxvY2snOw0KICAgICAgICB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1c2UnKVswXS5zZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCAnIycgKyB0eXBlKTsNCiAgICAgICAgb2JqLnRvZ3R5cGUgPSB0eXBlOw0KICAgICAgICBjaGVja0lEID0gb2JqOw0KDQogICAgICAgIHV0ZChvYmosIGlkLCBkaXNwbGF5KTsNCiAgICAgICAgZXh0cmFSZWxhRmluKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gdXRkKG9iaiwgaWQsIHNob3csIG9jKSB7DQoNCiAgICB2YXIgcHNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKSB7DQogICAgICAgIGlmIChvYmoucmVsYWZyb20uZGlzcGxheSAhPT0gcHNob3cpIHsNCiAgICAgICAgICAgIHZhciByZWxhZnJvbXMgPSBPYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmoucmVsYWZyb20uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmoucmVsYXRvKSB7DQogICAgICAgIGlmIChvYmoucmVsYXRvLmRpc3BsYXkgIT09IHBzaG93KSB7DQogICAgICAgICAgICB2YXIgcmVsYXRvcyA9IE9iamVjdC5rZXlzKG9iai5yZWxhdG8pOw0KICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZWxhdG9zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0MgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqLnJlbGF0by5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5jYWxsKSB7DQogICAgICAgIHZhciBjYWxscyA9IE9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYgKGNoZWNrSUQgIT09IG9iaikgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBhID0gY2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouY2FsbFtjYWxsc1tpXV07DQogICAgICAgICAgICAgICAgdmFyIGMgPSBiLnRvZ3R5cGU7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20gJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYi5yZWxhdG8uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3MgPSBPYmplY3Qua2V5cyhiLnJlbGF0byk7DQogICAgICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGF0b3MubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYykgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdtaW51cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsIHx8IGIuYm91bmRhcnkgfHwgYi5zdW1tYXJ5KSAmJiBjID09PSAncGx1cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93LCB0cnVlKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmNhbGwgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnN1bW1hcnkgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouc3VtbWFyeSkgew0KICAgICAgICB2YXIgc3VtbWFyeXMgPSBPYmplY3Qua2V5cyhvYmouc3VtbWFyeSk7DQogICAgICAgIGlmICgoY2hlY2tJRCAhPT0gb2JqICYmIChvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyB8fCAhb2JqLnRvZ3R5cGUpKSB8fCBjaGVja0lEID09PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgYSA9IHN1bW1hcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBvc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5nZXRBdHRyaWJ1dGUoJ2VkOnBhcmVudGlkJyk7DQogICAgICAgICAgICAgICAgaWYgKG9zcC5tYXRjaCgvXCwvKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwYSA9IG9zcC5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwTCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvc3BhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyA9PSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3NwYVtqXSkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NwTCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcEwrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAob3NwTCAhPT0gb3NwYS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBiID0gb2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGMpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIithKyInXSIpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYoYz09PSdtaW51cycpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZiAoYi5jYWxsJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouYm91bmRhcnkpIHsNCiAgICAgICAgdmFyIGJvdW5kYXJ5cyA9IE9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmIChjaGVja0lEICE9PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnlzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIGEgPSBib3VuZGFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouYm91bmRhcnlbYm91bmRhcnlzW2ldXTsNCiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3cpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGIuY2FsbCYmIWMpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYikubGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoIW9jICYmIG9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB2YXIgdFNQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigicGF0aFtlZFxcOnRvc3VwZXJpZD0nIiArIGEgKyAiJ10iKTsNCiAgICAgICAgICAgIGlmICh0U1BhdGgpIHsNCiAgICAgICAgICAgICAgICB0U1BhdGguc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgbm90ZVRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpub3RldG89JyIgKyBhICsgIiddIik7DQogICAgICAgICAgICBpZiAobm90ZVRpcCkgew0KICAgICAgICAgICAgICAgIG5vdGVUaXAuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGFmcm9tLmRpc3BsYXkgIT09IHNob3cpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICByZWxhZnJvbXMuc3BsaWNlKHJlbGFmcm9tcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGFmcm9tcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0by5kaXNwbGF5ICE9PSBzaG93KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zID0gT2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYXRvcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKChiLmNhbGwgfHwgYi5ib3VuZGFyeSB8fCBiLnN1bW1hcnkpICYmIGMgPT09ICdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdywgdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5jYWxsICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSAmJiAhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBleHRyYVJlbGFGaW4oKSB7DQogICAgdmFyIGV4dHJha2V5cyA9IE9iamVjdC5rZXlzKGV4dHJhUmVsYSk7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRyYWtleXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGV4dHJhT2JqID0gZXh0cmFSZWxhW2V4dHJha2V5c1tpXV07DQogICAgICAgIGlmIChleHRyYU9iai5pc0MgPT09IHRydWUpIHsNCiAgICAgICAgICAgIHZhciBmc2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmoudG9pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmouaWQpLnN0eWxlLmRpc3BsYXkgPSBmc2hvdyAmJiB0c2hvdyA/ICdibG9jaycgOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
